﻿using System;
using System.Configuration;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using TheBullysStore.Controllers;
using System.Data.SqlClient;
using log4net;
namespace TheBullysStore.Models.ModuloAdministracion.JuntaDirectiva
{
    public class JuntaDirectivaDAO
    {
        private static ILog log = LogManager.GetLogger(typeof(JuntaDirectivaDAO));
        public string mantenerJuntaDirectiva(JuntaDirectivaBean juntaDirectiva)
        {
            //******************************************************************
            //******************************************************************

            string mensaje = "";
            String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;
            string commandString = "";
            SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);
            SqlCommand sqlCmd;
            sqlCon.Open();

            try
            {

                if (juntaDirectiva.accion == 0)
                {
                    commandString = "update  junta_propietario set estado=0 where id_junta_propietario=" + juntaDirectiva.id_junta_propietario;
                    mensaje = "Se elimino la Junta Directiva correctamente";

                }
                if (juntaDirectiva.accion == 1)
                {
                    int x;
                    commandString = "select count(*) from junta_propietario where anio ='" + juntaDirectiva.anio + "' and estado = 1";
                    sqlCmd = new SqlCommand(commandString, sqlCon);
                    if (!Convert.IsDBNull(sqlCmd.ExecuteScalar()))
                    {
                        x = (int)sqlCmd.ExecuteScalar();
                    }
                    else
                    {

                        x = 0;
                    }



                    if (x != 0)
                    {
                        mensaje = "Ya existe Junta Directiva en el anio: '" + juntaDirectiva.anio + "', No se pudo insertar";
                        sqlCon.Close();
                        return mensaje;
                    }
                    //inserto junta
                    commandString = "insert into junta_propietario (id_edificio,anio,estado)values('" + juntaDirectiva.id_edificio + "','" + juntaDirectiva.anio + "',1)";
                    sqlCmd = new SqlCommand(commandString, sqlCon);
                    sqlCmd.ExecuteNonQuery();
                    //averiguo el idjunta
                    commandString = "select id_junta_propietario from junta_propietario where anio ='" + juntaDirectiva.anio + "' ";
                    sqlCmd = new SqlCommand(commandString, sqlCon);
                    juntaDirectiva.id_junta_propietario = (int)sqlCmd.ExecuteScalar();
                    //inserto los propietarios
                    String[] aux;
                    aux = juntaDirectiva.propietarios.Split('|');
                    for (int i = 0; i < aux.Count(); i++)
                    {
                        if (!aux[i + 1].Equals(""))
                        {
                            commandString = "insert into junta_x_propietario values(" + juntaDirectiva.id_junta_propietario + ",'" + aux[i+1] + "','" + aux[i] + "')";
                            sqlCmd = new SqlCommand(commandString, sqlCon);
                            sqlCmd.ExecuteNonQuery();
                        }
                        i++;
                    }
                    mensaje = "Se inserto la Junta Directiva correctamente";
                }
                if (juntaDirectiva.accion == 2)
                {
                    commandString = "update junta_propietario set id_edificio='" + juntaDirectiva.id_edificio + "',anio='" + juntaDirectiva.anio + "'where id_junta_propietario='" + juntaDirectiva.id_junta_propietario + "'";
                    sqlCmd = new SqlCommand(commandString, sqlCon);
                    sqlCmd.ExecuteNonQuery();
                    //elimino los propietarios
                    commandString = "delete junta_x_propietario where id_junta_propietario='" + juntaDirectiva.id_junta_propietario + "'";
                    sqlCmd = new SqlCommand(commandString, sqlCon);
                    sqlCmd.ExecuteNonQuery();
                    //inserto los propietarios
                    String[] aux;
                    aux = juntaDirectiva.propietarios.Split('|');
                    for (int i = 0; i < aux.Count(); i++)
                    {
                        if (!aux[i + 1].Equals(""))
                        {
                            commandString = "insert into junta_x_propietario values(" + juntaDirectiva.id_junta_propietario + ",'" + aux[i+1] + "','" + aux[i] + "')";
                            sqlCmd = new SqlCommand(commandString, sqlCon);
                            sqlCmd.ExecuteNonQuery();
                        }
                        i++;
                    }
                    mensaje = "Se modifico la Junta Directiva correctamente";
                }
                sqlCon.Close();
            }

            catch (Exception ex)
            {
                log.Error("mantenerJuntaDirectiva(EXCEPTION): ", ex);
                throw ex;
                if (juntaDirectiva.accion == 0)
                {
                    mensaje = "No se pudo eliminar la Junta Directiva correctamente";

                }
                if (juntaDirectiva.accion == 1)
                {
                    mensaje = "No se pudo insertar la Junta Directiva correctamente";
                }
                if (juntaDirectiva.accion == 2)
                {
                    mensaje = "No se pudo modificar la Junta Directiva correctamente";
                }
                sqlCon.Close();
                return mensaje;
            }
            finally
            {
                sqlCon.Close();
            }
            return mensaje;
        }
        public List<string> cargarTipoProducto()
        {
            String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;
            List<string> listaTema = new List<string>();
            SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);
            sqlCon.Open();
            try
            {

                string commandString = "select distinct tipo_producto from tipo_producto where estado =1";


                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);
                SqlDataReader dataReader = sqlCmd.ExecuteReader();

                while (dataReader.Read())
                {



                    listaTema.Add((string)dataReader["tipo_producto"]);
                }
                dataReader.Close();




                sqlCon.Close();

                return listaTema;
            }
            catch (Exception ex)
            {
                log.Error("cargarTipoProducto(EXCEPTION): ", ex);
                throw ex;
            }
            finally
            {
                sqlCon.Close();
            }



        }
        public List<EdificioR> ListarEdificiosR()
        {
            List<EdificioR> listaEdificios = new List<EdificioR>();
            String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;

            SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);
            sqlCon.Open();
            try
            {
                
                string commandString = "SELECT * FROM edificio where estado='1'";

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);
                SqlDataReader dataReader = sqlCmd.ExecuteReader();

                while (dataReader.Read())
                {
                    EdificioR edificio = new EdificioR();
                    edificio.id_edificio = Convert.ToString(dataReader["id_edificio"]);
                    edificio.nombre = Convert.ToString(dataReader["nombre"]);

                    listaEdificios.Add(edificio);
                }

                dataReader.Close();
                sqlCon.Close();
                return listaEdificios;
            }
            catch (Exception ex)
            {
                log.Error("listarEdificios(EXCEPTION): ", ex);
                throw ex;
            }
            finally
            {
                sqlCon.Close();
            }
        }
        public List<Propietario> listarPropietarioR(string nombre, string apellido, string edificio)
        {
            List<Propietario> listaConsulta = new List<Propietario>();
            String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;

            SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);
            sqlCon.Open();
            try
            {
                string commandString = "SELECT a.id_persona,a.Nombres, a.Apellidos FROM persona a, habitante b";
                commandString = commandString + " WHERE estado = 1 and a.id_persona = b.id_persona and b.es_propietario = 1";
                commandString = commandString + " AND a.id_edificio = '" + edificio + "'";
                commandString = commandString + " AND a.nombres like '%" + nombre + "%'";
                commandString = commandString + " AND a.apellidos like '%" + apellido + "%'";

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);
                SqlDataReader dataReader = sqlCmd.ExecuteReader();

                //System.Diagnostics.Debug.WriteLine("--------------------------------------------inicio");

                while (dataReader.Read())
                {
                    Propietario propietario = new Propietario();
                    propietario.id_propietario = Convert.ToString(dataReader["id_persona"]);
                    propietario.nombres = Convert.ToString(dataReader["nombres"]);
                    propietario.apellidos = Convert.ToString(dataReader["apellidos"]);

                    listaConsulta.Add(propietario);
                }
                //System.Diagnostics.Debug.WriteLine("--------------------------------------------fin consulta dao");
                //System.Diagnostics.Debug.WriteLine("--------------------------------------------fin consulta dao " + listaConsulta.Count());
                dataReader.Close();
                sqlCon.Close();
                return listaConsulta;
            }
            catch (Exception ex)
            {
                log.Error("listarPropietario(EXCEPTION): ", ex);
                throw ex;
            }
            finally
            {
                sqlCon.Close();
            }
        }
        public BusquedaJuntaDirectivaBean buscarJuntaDirectiva(string anio, string id_edificio)
        {
            List<Propietario> listaPropietarios = new List<Propietario>();
                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;

                SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);
                sqlCon.Open();
            try
            {
                
                string commandString = "SELECT a.id_persona,a.Nombres, a.Apellidos,d.cargo FROM persona a, habitante b,junta_propietario c, junta_x_propietario d";
                commandString = commandString + " WHERE c.estado = 1 and a.id_persona = b.id_persona and c.id_junta_propietario = d.id_junta_propietario and d.id_persona = b.id_persona and b.es_propietario = 1";
                commandString = commandString + " and c.anio = '" + anio + "'";
                commandString = commandString + " and c.id_edificio = '" + id_edificio + "' order by d.cargo";

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);
                SqlDataReader dataReader = sqlCmd.ExecuteReader();

                //System.Diagnostics.Debug.WriteLine("--------------------------------------------inicio");

                while (dataReader.Read())
                {
                    Propietario propietario = new Propietario();
                    propietario.id_propietario = Convert.ToString(dataReader["id_persona"]);
                    propietario.nombres = Convert.ToString(dataReader["nombres"]);
                    propietario.apellidos = Convert.ToString(dataReader["apellidos"]);

                    listaPropietarios.Add(propietario);
                }
                int x = 1;
                BusquedaJuntaDirectivaBean busquedaJuntaDirectiva = new BusquedaJuntaDirectivaBean();
                foreach (Propietario prop in listaPropietarios)
                {
                    if (x == 1)
                    {
                        busquedaJuntaDirectiva.presidente = prop;
                    }
                    if (x == 2)
                    {
                        busquedaJuntaDirectiva.vicepresidente = prop;
                    }
                    if (x == 3)
                    {
                        busquedaJuntaDirectiva.secretario = prop;
                    }
                    if (x == 4)
                    {
                        busquedaJuntaDirectiva.tesorero = prop;
                    }
                    if (x == 5)
                    {
                        busquedaJuntaDirectiva.vocal = prop;
                    }
                    x++;
                }
                dataReader.Close();
                commandString = "SELECT * FROM junta_propietario";
                commandString = commandString + " WHERE";
                commandString = commandString + " anio = '" + anio + "'";
                commandString = commandString + " and id_edificio = '" + id_edificio + "'";
                SqlCommand sqlCmd2 = new SqlCommand(commandString, sqlCon);
                SqlDataReader dataReader2 = sqlCmd2.ExecuteReader();
                dataReader2.Read();
                busquedaJuntaDirectiva.anio = Convert.ToInt32(dataReader2["anio"]);
                busquedaJuntaDirectiva.id_edificio = Convert.ToInt32(dataReader2["id_edificio"]);
                busquedaJuntaDirectiva.id_junta_directiva = Convert.ToInt32(dataReader2["id_junta_propietario"]);
                //System.Diagnostics.Debug.WriteLine("--------------------------------------------fin consulta dao");
                //System.Diagnostics.Debug.WriteLine("--------------------------------------------fin consulta dao " + listaConsulta.Count());
                
                dataReader2.Close();
                sqlCon.Close();
                return busquedaJuntaDirectiva;
            }
            catch (Exception ex)
            {
                log.Error("buscarJuntaDirectiva(EXCEPTION): ", ex);
                throw ex;
            }
            finally
            {
                sqlCon.Close();
            }
        }
    }
}